package flst.ipiweb.struts.action.article;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import flst.ipiweb.service.ServiceArticle;
import flst.ipiweb.service.ServiceEnseigne;
import flst.ipiweb.transverse.Article;
import flst.ipiweb.transverse.Enseigne;
import flst.ipiweb.transverse.IPIException;

public class UpdateArticlePostAction extends Action{
	
	public ActionForward execute(
			ActionMapping mapping, 
			ActionForm form,
			HttpServletRequest request, 
			HttpServletResponse response)
			throws Exception {
			
			//On récupère la session
			HttpSession session = request.getSession();
			//Si l'administrateur n'est pas logué 
			//on le redirige sur le formulaire de login
			if(session.getAttribute("login") == null)
			{
				return mapping.findForward("login");
			}
			
			//Création de l'article depuis le formulaire
			ArticleForm vArticleForm = (ArticleForm) form;
			Article article = new Article();
			article.setIdArticle(vArticleForm.getIdArticle());
			article.setDescriptionCourte(vArticleForm.getShortDescription());
			article.setDescriptionLongue(vArticleForm.getLongDescription());
			//Création de l'enseigne associée
			Enseigne enseigne = new Enseigne();
			enseigne.setIdEnseigne(vArticleForm.getStore());
			article.setEnseigne(enseigne);
			article.setModele(vArticleForm.getModele());
			article.setPrix(vArticleForm.getPrice());
			article.setQuantite(vArticleForm.getQuantity());
			article.setReferenceArticle(vArticleForm.getRefarticle());
			
			//récupération du fichier image
			FormFile file = vArticleForm.getPicture();
			article.setImage(file.getFileName());
			
			//récupération de l'article à mettre à jour
			ServiceArticle sArticle = new ServiceArticle();
			Article vArticleOld = sArticle.getArticleById(article.getIdArticle());
			if(article.getImage() == "")
			{
				article.setImage(vArticleOld.getImage());
			}
			
			//si l'image à changer on l'a télécharge
			if(article.getImage() != vArticleOld.getImage())
			{
				//COPY du fichier sur le serveur
				try
				{
					//path des images pour le dossier uploads
					String filePath = getServlet().getServletContext().getRealPath("/") +"uploads";
					//Si le dossier n'existe pas on le crée
					File folder = new File(filePath);
					if(!folder.exists()){
						folder.mkdir();
					}
					
					//upload du fichier
					String fileName = file.getFileName();
					if(!("").equals(fileName)){
						File uploadFileName = new File(filePath, fileName);
						if(!uploadFileName.exists()){
							FileOutputStream vFos = new FileOutputStream(uploadFileName);
							vFos.write(file.getFileData());
							vFos.flush();
							vFos.close();
						}
					}
				}
				catch(Exception e)
				{
					session.setAttribute("error","ArticleException.create.file");
				}
			}

			
			try
			{
				sArticle.updateArticle(article);
				//Message de succes
				session.setAttribute("success", "ArticleSuccess.update");
				session.setAttribute("error", null);
			}
			catch(IPIException e)
			{
				//Message d'erreur
				session.setAttribute("error", e.getMessage());
				session.setAttribute("success", null);
				
				request.setAttribute("article", article);
				
				//Liste des enseignes
				ServiceEnseigne sEnseigne = new ServiceEnseigne(); 
				List<Enseigne> listEnseigne = sEnseigne.listerEnseigne();
				request.setAttribute("listEnseigne",listEnseigne);
				
				//Titre de la page
				request.setAttribute("pageTitle", "article.new.title");
				//Action du formulaire
				request.setAttribute("action", "/update-article-post");
				
				return mapping.findForward("update_article");
			}
			
			return mapping.findForward("list_article");
		}

}
